home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / program / libkb100.zip / LIBKB-1.00 / SAMPLES / KEYCODES.C < prev    next >
C/C++ Source or Header  |  1996-07-23  |  2KB  |  113 lines

  1. /* keycodes.c -- utility program for the libkb keyboard library
  2.  * Copyright (C) 1995, 1996 Markus F.X.J. Oberhumer
  3.  * For conditions of distribution and use, see copyright notice in kb.h 
  4.  */
  5.  
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10.  
  11. #include <kb.h>
  12. #include "intro.h"
  13.  
  14.  
  15. int opt_show_number = 0;
  16.  
  17.  
  18. /***********************************************************************
  19. // examine which keycodes are produced by which keys
  20. ************************************************************************/
  21.  
  22. static int try_key(unsigned code, unsigned scan, unsigned shift, int *found)
  23. {
  24.     unsigned key = scan | (shift << 8);
  25.  
  26.     if (code != kb_keycode(key))
  27.         return 0;
  28.  
  29.     (*found)++;
  30.     if (opt_show_number)
  31.         printf("  0x%04x ",key);
  32.     else
  33.     {
  34.         printf("   ");
  35.         if (KB_ANY_MASK(shift,KB_SHIFT_ANY_SHIFT))
  36.             printf("S-");
  37.         if (KB_ANY_MASK(shift,KB_SHIFT_ANY_CONTROL))
  38.             printf("C-");
  39.         if (KB_ANY_MASK(shift,KB_SHIFT_ANY_ALT))
  40.             printf("A-");
  41.         printf("%s",kb_keyname(key));
  42.     }
  43.     return 1;
  44. }
  45.  
  46.  
  47. static int find_code(unsigned code)
  48. {
  49.     unsigned scan;
  50.     int found = 0;
  51.  
  52.     if (code >= 32 && code < 127)
  53.         printf("'%c'",(char) code);
  54.     else
  55.         printf("   ");
  56.     printf("  %3d  0x%03x:",code,code);
  57.  
  58.     for (scan = 0; scan < 128; scan++)
  59.     {
  60.         /* try all keycode tables */
  61.         try_key(code, scan, 0, &found);
  62.         try_key(code, scan, KB_SHIFT_LSHIFT, &found);
  63.         try_key(code, scan, KB_SHIFT_LCONTROL, &found);
  64.         try_key(code, scan, KB_SHIFT_ALT, &found);
  65.     }
  66.  
  67.     printf("\n");
  68.     return found;
  69. }
  70.  
  71.  
  72. /***********************************************************************
  73. // 
  74. ************************************************************************/
  75.  
  76. int main(int argc, char *argv[])
  77. {
  78.     int i;
  79.     int codes = 0, keys = 0;
  80.     char s[80+1];
  81.  
  82.     for (i = 1; i < argc && argv[i][0] == '-'; i++)
  83.     {
  84.         if (argv[i][1] == 'n')
  85.             opt_show_number = 1;
  86.     }
  87.  
  88.     fputs("\n",stdout);
  89.     fputs(_kb_intro_text(s),stdout);
  90.     fputs("\n\n",stdout);
  91.  
  92.     kb_init();        /* init tables but don't install keyboard handler */
  93.  
  94.     /* find all codes */
  95.     for (i = 1; i < 0x300; i++)
  96.     {
  97.         int x = find_code(i);
  98.         if (x > 0)
  99.         {
  100.             codes++;
  101.             keys += x;
  102.         }
  103.     }
  104.  
  105.     printf("\n%d codes are generated by %d key combinations\n", codes, keys);
  106.     return 0;
  107. }
  108.  
  109.  
  110. /*
  111. vi:ts=4
  112. */
  113.